package com.tedu.oop.day4;

/**
 * 测试代码块之间的关系
 * 调用顺序：静态代码块(优于对象)->构造代码块->构造方法->局部代码块
 * 1.创建对象前 ，自动调用静态代码块 只加载一次
 * 2.创建对象时，自动调用构造代码块，构造方法
 * 3.通过对象调用方法时，方法里的局部代码块才会被调用
 * 4.创建哪个类，加载哪个类的静态代码块
 *
 * 作用：
 * 1.静态代码块：专门用来完成一些需要第一时间加载并只加载一次的资源
 * 2.构造代码块：提取构造方法中的共性内容
 * 3.构造方法：用来创建对象
 * 4.局部代码块：控制变量作用范围
 */
public class Test3_Block {
    public static void main(String[] args) {
/*        Person p=new Person();
        System.out.println("---------------------");
        Person p2=new Person();
        System.out.println("---------------------");*/
        Worker w=new Worker();
        System.out.println("---------------------");
        Worker w2=new Worker(10);
    }
}
class Person{
    int age;

    {
        System.out.println("父类构造代码块！");
    }
    static {//多次new 对象  只加载第一次
        System.out.println("父类静态代码块！");
    }

    public Person(){
        System.out.println("父类无参构造方法！");
    }
    public Person(int a){
        System.out.println("父类含参构造方法");
    }
    public void study(){
        {
            System.out.println("局部代码块");
        }
        System.out.println("好好学习，天天向上");
    }
}
class Worker extends Person{
/*    static {
        System.out.println("子类静态代码块");
    }*/
    {
        System.out.println("子类构造代码块");
    }
    public Worker(){
        System.out.println("子类无参构造方法");
    }
    public Worker(int a){
        System.out.println("子类含参构造方法");
    }

}
